package es.unileon.rnag.jgen.ejemplos;

import java.util.Arrays;

import es.unileon.rnag.jgen.AlgoritmoGenetico;
import es.unileon.rnag.jgen.Cromosoma;
import es.unileon.rnag.jgen.Estrategia;
import es.unileon.rnag.jgen.genes.*;

public class Biotec19_0519 extends Cromosoma {

	float k1 = 5e-3f;
	float k2 = 4e-3f;
	float k3 = 6e-3f;
	float k4 = 3e-3f;
	float kk = 8e-4f;
	public Biotec19_0519(){
		super(4);
		addGen(new GenRango(2, 6, 0.001));
		addGen(new GenRango(3,70,0.001));
		addGen(new GenRango(0.5, 5, 0.001));
		addGen(new GenRango(4,100,0.001));
	}
	
	public Biotec19_0519(Cromosoma c) {
		super(c);
	}

	@Override
	protected double calcularAptitud() {
		Gen[] genes = getGenes();
		double indol = (Double) genes[0].getValor();
		double ser = (Double) genes[1].getValor();
		double trp = (Double) genes[2].getValor();
		double nabr = (Double)genes[3].getValor();
		
		double num = (k3*nabr*(trp+k1*ser*indol))-(k2*Math.pow((trp+k1*ser*indol),2))-(kk*nabr*indol);
		num /= 1+k4;
		double den = trp+k1*ser*indol;
		double apt = num*100/den;
		if(apt>100){
			apt = 100;
		} else if (apt < 0){
			apt = 0;
		}
		return apt;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Estrategia e = new Estrategia(Estrategia.RULETA_DOS_PUNTOS, 0.9f,0.05f);
		AlgoritmoGenetico ag = new AlgoritmoGenetico(Biotec19_0519.class, e, 12, 500);
		ag.evolucionar();
		Cromosoma mejor = ag.getMejor();
		
		System.out.println("Indol: " + (Double)mejor.getGenes()[0].getValor());
		System.out.println("Serina: " + (Double)mejor.getGenes()[1].getValor());
		System.out.println("Triptofano: " + (Double)mejor.getGenes()[2].getValor());
		System.out.println("NaBr: " + (Double)mejor.getGenes()[3].getValor());
		System.out.printf("AptitudMejor = " + mejor.getAptitud());
	}

}
